package com.ebei.admin.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.IService;
import com.ebei.admin.model.dto.OrgDTO;
import com.ebei.admin.model.dto.OrgTree;
import com.ebei.admin.model.entity.SysOrg;
import com.ebei.common.util.Result;

import java.util.List;
import java.util.Map;

/**
 * 部门服务接口
 *
 * @author crazypenguin
 * @version 1.0
 * @created 2018/4/17
 */
public interface SysOrgService extends IService<SysOrg> {

    /**
     * 查询部门树菜单
     *
     * @param sysDeptEntityWrapper
     * @return 树
     */
    List<OrgTree> selectListTree(EntityWrapper<SysOrg> sysDeptEntityWrapper);

    /**
     * 查询当前节点子节点
     *
     * @param orgId
     * @return
     */
    List<SysOrg> getChildren(Integer orgId);

    /**
     * 级联添加组织,并根据type插入相应的表
     *
     * @param orgDTO
     * @return
     */
    Result cascadeInsert(OrgDTO orgDTO);

    /**
     * 根据组织id获取所有岗位
     */
    Result findPositionsByOrgId(Map<String, Object> map);

    /**
     * 根据用户id获取企业(组织)
     *
     * @return
     */
    Result getOrgByUserId(Integer userId);

    /**
     * 根据id查询组织详情
     *
     * @param id
     * @return
     */
    Result findOrgById(Integer id);

    /**
     * 根据登陆用户获取部门树
     *
     * @param userId
     * @return
     */
    Result getDeptTree(Integer userId);

    /**
     * 组织list转化成组织树
     *
     * @param sysOrgs
     * @param root
     * @return
     */
    List<OrgTree> getDeptTree(List<SysOrg> sysOrgs, Integer root);

    /**
     * 根据登陆用户获取可见组织类型
     *
     * @param userId
     * @return
     */
    Result getOrgType(Integer userId);

    /**
     * 根据用户id和parentid(orgId)获取组织
     *
     * @param map
     * @return
     */
    Result getByUserIdAndOrgId(Map<String, Object> map);

    /**
     * 根据顶级节点获取树
     *
     * @param orgId
     * @return
     */
    Result getOrgTreeByOrgId(Integer orgId);

    /**
     * 获取人员能看到的园区 企业
     *
     * @param userId
     * @return
     */
    Result getPermissionByUserId(Integer userId);

    /**
     * 查询给出组织指定类型的第一个上级
     * @param orgId
     * @param type
     * @return
     */
    SysOrg getTypedOrgByOrgId(Integer orgId, Integer type);

    /**
     * 根据parentId和type查询
     *
     * @return
     */
    List<SysOrg> findByParentIdAndType(Map<String, Object> params);

    /**
     * 删除组织架构
     * @param params
     * @return
     */
    Result<Boolean> delOrg(Map<String, Object> params);

}
